package com.tedu.api.thread;

/**
 * 线程常用API：四
 * join()    线程同步
 * 作用：允许一个线程在另外一个线程上等待，执行完毕上一个线程，执行当前线程！
 * join常用在线程协调之间同步操作！
 * 同步运行：执行先后顺序
 * 异步运行：执行代码没有先后顺序，各自执行自己的代码块(多线程)
 * 需求：模拟下载功能：下载“图片”---1%~100%----单一流程：线程---共享状态变量
 * 【下载完毕之后】
 * 显示“图片”---单一流程：线程
 * 同步运行：执行完毕下载图片操作，显示图片操作
 */
public class Thread_join {
    //图片是否下载完毕：共享状态变量---线程同步 true下载完毕   false没有下载完毕
    public static boolean isFinish = false;
    public static void main(String[] args) {
        //创建   下载线程，功能：1%~100% 下载百分比  download
        System.out.println("下载：开始下载图片");
        Thread download=new Thread(()->{
            for (int i=1;i<=100;i++){
                System.out.println(i+"%");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            isFinish=true; //当百分比到100%时  下载状态改为true  结束下载，下载完毕
            System.out.println("准备显示图片中。。。。。");
        });
        download.start();
        //创建   显示线程  功能：显示图片，下载完毕之后显示  show
        System.out.println("准备显示图片中----");
        Thread show=new Thread(()->{
            //2.在显示图片前，必须需要下载完毕图片
            try {
                download.join();  //同步：先执行download在执行show
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //3.如果图片没有下载完毕 ----提示打开失败
            if (!isFinish){
                //false--没有正常下载完毕--提示
                throw new RuntimeException("加载图片失败~~~");
            }
            System.out.println("恭喜：图片加载完毕~~");
        });
        show.start();
    }
}
